package administracion;


import java.util.ArrayList;
import java.util.List;

import dao.AdministracionDAO;
import dao.ProveedorDAO;
import dao.VehiculoDAO;
import dto.Vehiculo.DTO_PlanMantenimiento;
import dto.Vehiculo.DTO_TareaMantenimiento;
import dto.Vehiculo.DTO_TareaMantenimientoRealizada;
import dto.Vehiculo.DTO_TareasPorKilometro;
import dto.Vehiculo.DTO_TareasPorTiempo;
import dto.Vehiculo.DTO_Vehiculo;
import entity.Administracion.Entity_Sucursal;
import entity.Proveedor.Entity_Proveedor;
import entity.Vehiculo.Entity_PlanMantenimiento;
import entity.Vehiculo.Entity_TareaMantenimiento;
import entity.Vehiculo.Entity_TareaMantenimientoKilometro;
import entity.Vehiculo.Entity_TareaMantenimientoRealizada;
import entity.Vehiculo.Entity_TareaMantenimientoTiempo;
import entity.Vehiculo.Entity_Vehiculo;

public class Gestor_Vehiculo {
	private static Gestor_Vehiculo instancia;
	
	private Gestor_Vehiculo(){
		
	}
	
	public static Gestor_Vehiculo getInstancia(){
		if(instancia == null){
			instancia = new Gestor_Vehiculo();
		} 
		return instancia;
	}


	public void altaPlanMantenimiento(DTO_PlanMantenimiento planMantenimiento) {
		Entity_PlanMantenimiento pm = new Entity_PlanMantenimiento();
		pm.setDescripcion(planMantenimiento.getDescripcion());
		pm.setTolerancia(planMantenimiento.getTolerancia());
		pm.setComentarios(planMantenimiento.getComentarios());
	
		VehiculoDAO.getInstancia().altaPlanMantenimiento(pm);
	}

	public void modificarPlanMantenimiento(	DTO_PlanMantenimiento planMantenimiento) {
		Entity_PlanMantenimiento pm = new Entity_PlanMantenimiento();
		pm.setId(planMantenimiento.getId());
		pm.setDescripcion(planMantenimiento.getDescripcion());
		pm.setTolerancia(planMantenimiento.getTolerancia());
		pm.setComentarios(planMantenimiento.getComentarios());
	
		VehiculoDAO.getInstancia().modificarPlanMantenimiento(pm);
	}

	public void bajaPlanMantenimiento(Integer idPlanMantenimiento) {
		Entity_PlanMantenimiento p = VehiculoDAO.getInstancia().getPlanMantenimiento(idPlanMantenimiento);
		if (p != null)
			VehiculoDAO.getInstancia().bajaPlanMantenimiento(p);
	}
	public DTO_PlanMantenimiento getPlanMantenimiento(Integer idPlanMantenimiento){
		return  VehiculoDAO.getInstancia().getPlanMantenimiento(idPlanMantenimiento).toDTO();
	}
	public void altaTareaMantenimientoKilometro(DTO_TareasPorKilometro tarea) {
		Entity_TareaMantenimientoKilometro tm = new Entity_TareaMantenimientoKilometro();
		tm.setTarea(tarea.getTarea());
		tm.setCantidadKilometros(tarea.getCantidadKilometros());
		VehiculoDAO.getInstancia().altaTareaMantenimientoKilometro(tm);
	}

	public void modificarTareaMantenimientoKilometro(DTO_TareasPorKilometro tarea) {
		Entity_TareaMantenimientoKilometro tm = new Entity_TareaMantenimientoKilometro();
		tm.setId(tarea.getId());
		tm.setTarea(tarea.getTarea());
		tm.setCantidadKilometros(tarea.getCantidadKilometros());
		VehiculoDAO.getInstancia().modificarTareaMantenimientoKilometro(tm);
	}

	public void bajaTareaMantenimientoKilometro(Integer idTareaMantenimientoKilometro) {
		Entity_TareaMantenimientoKilometro t = VehiculoDAO.getInstancia().getTareaMantenimientoKilometro(idTareaMantenimientoKilometro);
		if (t != null)
			VehiculoDAO.getInstancia().bajaTareaMantenimientoKilometro(t);
	}
	public DTO_TareasPorKilometro getTareaMantenimientoKilometro(Integer idTareaMantenimientoKilometro){
		return (DTO_TareasPorKilometro) VehiculoDAO.getInstancia().getTareaMantenimientoKilometro(idTareaMantenimientoKilometro).toDTO();
	}

	public void altaTareaMantenimientoTiempo(DTO_TareasPorTiempo tarea) {
		Entity_TareaMantenimientoTiempo tm = new Entity_TareaMantenimientoTiempo();
		tm.setTarea(tarea.getTarea());
		tm.setCantidadDias(tarea.getCantidadDias());
		VehiculoDAO.getInstancia().altaTareaMantenimientoTiempo(tm);
	}

	public void modificarTareaMantenimientoTiempo(DTO_TareasPorTiempo tarea) {
		Entity_TareaMantenimientoTiempo tm = new Entity_TareaMantenimientoTiempo();
		tm.setId(tarea.getId());
		tm.setTarea(tarea.getTarea());
		tm.setCantidadDias(tarea.getCantidadDias());
		VehiculoDAO.getInstancia().altaTareaMantenimientoTiempo(tm);
	}

	public void bajaTareaMantenimientoTiempo(Integer idTareaMantenimientoTiempo) {
		Entity_TareaMantenimientoTiempo t = VehiculoDAO.getInstancia().getTareaMantenimientoTiempo(idTareaMantenimientoTiempo);
		if (t != null)
			VehiculoDAO.getInstancia().bajaTareaMantenimientoTiempo(t);
	}
	public DTO_TareasPorTiempo getTareaMantenimientoTiempo(Integer idTareaMantenimientoTiempo){
		return (DTO_TareasPorTiempo) VehiculoDAO.getInstancia().getTareaMantenimientoTiempo(idTareaMantenimientoTiempo).toDTO();
	}
	public void altaVehiculo(DTO_Vehiculo vehiculo) {
		Entity_Vehiculo v = new Entity_Vehiculo();
		v.setTipo(vehiculo.getTipo());
		v.setPatente(vehiculo.getPatente());
		v.setMarca(vehiculo.getMarca());
		v.setModelo(vehiculo.getModelo());
		v.setKilometros(vehiculo.getKilometros());
		v.setAncho(vehiculo.getAncho());
		v.setAlto(vehiculo.getAlto());
		v.setLargo(vehiculo.getLargo());
		v.setPeso(vehiculo.getPeso());
		v.setTara(vehiculo.getTara());
		v.setVolumen(vehiculo.getVolumen());
		v.setCostoKM(vehiculo.getCostoKM());
		v.setFechaIngreso(vehiculo.getFechaIngreso());
		v.setUltimoMantenimiento(vehiculo.getUltimoMantenimiento());
		v.setUltimoUso(vehiculo.getUltimoUso());
		v.setVencimientoGarantia(vehiculo.getVencimientoGarantia());
		
		Entity_Sucursal s = AdministracionDAO.getInstancia().getSucursal(vehiculo.getIdSucursal());
		v.setSucursal(s);
		
		Entity_Sucursal sa = AdministracionDAO.getInstancia().getSucursal(vehiculo.getIdSucursalActual());
		v.setSucursalActual(sa);
		
		v.setTemperaturaMin(vehiculo.getTemperaturaMin());
		v.setTemperaturaMax(vehiculo.getTemperaturaMax());
		
		Entity_PlanMantenimiento pm = VehiculoDAO.getInstancia().getPlanMantenimiento(vehiculo.getIdPlanMantenimiento());
		v.setPlan(pm);

		
		VehiculoDAO.getInstancia().altaVehiculo(v);
	}

	public void modificarVehiculo(DTO_Vehiculo vehiculo) {
		Entity_Vehiculo v = new Entity_Vehiculo();
		v.setId(vehiculo.getId());
		v.setTipo(vehiculo.getTipo());
		v.setPatente(vehiculo.getPatente());
		v.setMarca(vehiculo.getMarca());
		v.setModelo(vehiculo.getModelo());
		v.setKilometros(vehiculo.getKilometros());
		v.setAncho(vehiculo.getAncho());
		v.setAlto(vehiculo.getAlto());
		v.setLargo(vehiculo.getLargo());
		v.setPeso(vehiculo.getPeso());
		v.setTara(vehiculo.getTara());
		v.setVolumen(vehiculo.getVolumen());
		v.setCostoKM(vehiculo.getCostoKM());
		v.setFechaIngreso(vehiculo.getFechaIngreso());
		v.setUltimoMantenimiento(vehiculo.getUltimoMantenimiento());
		v.setUltimoUso(vehiculo.getUltimoUso());
		v.setVencimientoGarantia(vehiculo.getVencimientoGarantia());
		
		Entity_Sucursal s = AdministracionDAO.getInstancia().getSucursal(vehiculo.getIdSucursal());
		v.setSucursal(s);
		
		Entity_Sucursal sa = AdministracionDAO.getInstancia().getSucursal(vehiculo.getIdSucursalActual());
		v.setSucursalActual(sa);
		
		v.setTemperaturaMin(vehiculo.getTemperaturaMin());
		v.setTemperaturaMax(vehiculo.getTemperaturaMax());
		
		Entity_PlanMantenimiento pm = VehiculoDAO.getInstancia().getPlanMantenimiento(vehiculo.getIdPlanMantenimiento());
		v.setPlan(pm);

		
		VehiculoDAO.getInstancia().modificarVehiculo(v);
	}

	public void bajaVehiculo(Integer idVehiculo) {
		Entity_Vehiculo v = VehiculoDAO.getInstancia().getVehiculo(idVehiculo);
		if (v != null)
			VehiculoDAO.getInstancia().bajaVehiculo(v);
	}
	
	public DTO_Vehiculo buscarVehiculo(String patente) {
		return VehiculoDAO.getInstancia().buscarVehiculo(patente).toDTO();
	}

	public void altaTareaMantenimientoRealizada(DTO_TareaMantenimientoRealizada tareaMantenimientoRealizada) {
		Entity_TareaMantenimientoRealizada tmr = new Entity_TareaMantenimientoRealizada();
		
		Entity_TareaMantenimientoKilometro tk = VehiculoDAO.getInstancia().getTareaMantenimientoKilometro(tareaMantenimientoRealizada.getIdTareaMantenimiento());
		Entity_TareaMantenimientoTiempo tt = VehiculoDAO.getInstancia().getTareaMantenimientoTiempo(tareaMantenimientoRealizada.getIdTareaMantenimiento());
		
		if (tk != null)
			tmr.setTareaMantenimiento(tk);
		if (tt != null)
			tmr.setTareaMantenimiento(tk);

		tmr.setFecha(tareaMantenimientoRealizada.getFecha());
		tmr.setCantidadKilometros(tareaMantenimientoRealizada.getCantidadKilometros());
		Entity_Proveedor p = ProveedorDAO.getInstancia().getProveedor(tareaMantenimientoRealizada.getIdProveedor());
		
		tmr.setProveedor(p);
		
		VehiculoDAO.getInstancia().altaTareaMantenimientoRealizada(tmr);
		
	}

	public void modificarTareaMantenimientoRealizada(DTO_TareaMantenimientoRealizada tareaMantenimientoRealizada) {
		Entity_TareaMantenimientoRealizada tmr = new Entity_TareaMantenimientoRealizada();
		tmr.setId(tareaMantenimientoRealizada.getId());
		Entity_TareaMantenimientoKilometro tk = VehiculoDAO.getInstancia().getTareaMantenimientoKilometro(tareaMantenimientoRealizada.getIdTareaMantenimiento());
		Entity_TareaMantenimientoTiempo tt = VehiculoDAO.getInstancia().getTareaMantenimientoTiempo(tareaMantenimientoRealizada.getIdTareaMantenimiento());
		
		if (tk != null)
			tmr.setTareaMantenimiento(tk);
		if (tt != null)
			tmr.setTareaMantenimiento(tk);

		tmr.setFecha(tareaMantenimientoRealizada.getFecha());
		tmr.setCantidadKilometros(tareaMantenimientoRealizada.getCantidadKilometros());
		Entity_Proveedor p = ProveedorDAO.getInstancia().getProveedor(tareaMantenimientoRealizada.getIdProveedor());
		
		tmr.setProveedor(p);
		
		VehiculoDAO.getInstancia().altaTareaMantenimientoRealizada(tmr);
	}
	
	public DTO_TareaMantenimientoRealizada getTareaMantenimientoRealizada(Integer idTareaMantenimientoRealizada){
		return VehiculoDAO.getInstancia().getTareaMantenimientoRealizada(idTareaMantenimientoRealizada).toDTO();
	}

	public List<DTO_PlanMantenimiento> listarPlanMantenimiento() {
		List<Entity_PlanMantenimiento> lista =	VehiculoDAO.getInstancia().listarPlanMantenimiento();
		if(lista != null){
			List<DTO_PlanMantenimiento>  listaDTO = new ArrayList<DTO_PlanMantenimiento>();
			for(Entity_PlanMantenimiento p : lista)
				listaDTO.add(p.toDTO());
			return listaDTO;
		}
		return null;
	}

	public List<DTO_TareaMantenimiento> listarTareasMantenimiento(Integer idPlanMantenimiento) {
		List<Entity_TareaMantenimiento> lista =	VehiculoDAO.getInstancia().listarTareasMantenimiento(idPlanMantenimiento);
		if(lista != null){
			List<DTO_TareaMantenimiento>  listaDTO = new ArrayList<DTO_TareaMantenimiento>();
			for(Entity_TareaMantenimiento t : lista)
				listaDTO.add(t.toDTO());
			return listaDTO;
		}
		return null;
	}

	public List<DTO_Vehiculo> listarVehiculos() {
		List<Entity_Vehiculo> lista =	VehiculoDAO.getInstancia().listarVehiculos();
		if(lista != null){
			List<DTO_Vehiculo>  listaDTO = new ArrayList<DTO_Vehiculo>();
			for(Entity_Vehiculo v : lista)
				listaDTO.add(v.toDTO());
			return listaDTO;
		}
		return null;
	}

	public List<DTO_Vehiculo> listarVehiculos(Integer idSucursal) {
		List<Entity_Vehiculo> lista =	VehiculoDAO.getInstancia().listarVehiculos(idSucursal);
		if(lista != null){
			List<DTO_Vehiculo>  listaDTO = new ArrayList<DTO_Vehiculo>();
			for(Entity_Vehiculo v : lista)
				listaDTO.add(v.toDTO());
			return listaDTO;
		}
		return null;
	}

	public List<DTO_Vehiculo> listarVehiculosMantenimiento() {
		// TODO Auto-generated method stub
		return null;
	}

	public List<DTO_Vehiculo> listarVehiculosMantenimiento(Integer idSucursal) {
		// TODO Auto-generated method stub
		return null;
	}

	public List<DTO_TareaMantenimientoRealizada> listarTareaMantenimientoRealizada(Integer idVehiculo) {
		List<Entity_TareaMantenimientoRealizada> lista =	VehiculoDAO.getInstancia().listarTareasMentenimientoRealizada(idVehiculo);
		if(lista != null){
			List<DTO_TareaMantenimientoRealizada>  listaDTO = new ArrayList<DTO_TareaMantenimientoRealizada>();
			for(Entity_TareaMantenimientoRealizada t : lista)
				listaDTO.add(t.toDTO());
			return listaDTO;
		}
		return null;
	}

	public List<DTO_TareaMantenimientoRealizada> listarTareaMantenimientoRealizadaProveedor(Integer idProveedor) {
		List<Entity_TareaMantenimientoRealizada> lista =	VehiculoDAO.getInstancia().listarTareaMantenimientoRealizadaProveedor(idProveedor);
		if(lista != null){
			List<DTO_TareaMantenimientoRealizada>  listaDTO = new ArrayList<DTO_TareaMantenimientoRealizada>();
			for(Entity_TareaMantenimientoRealizada t : lista)
				listaDTO.add(t.toDTO());
			return listaDTO;
		}
		return null;
	}

}
